package com.xxxtea.controller;

import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

import com.xxxtea.common.Result;
import com.xxxtea.common.UserContext;
import io.swagger.annotations.Api;
import com.xxxtea.service.ChatSessionRelService;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxxtea.common.Result;
import com.xxxtea.entity.ChatSessionRel;
import com.xxxtea.dto.PageQuery;
import com.xxxtea.util.ExcelUtils;

import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;

/**
 * 聊天会话关联控制器
 *
 * 提供聊天会话与业务对象、用户的关联管理，包括：
 * - 聊天会话关联的增删改查
 * - 分页与列表查询
 *
 * 使用Swagger注解进行API文档生成
 * 使用Lombok注解简化代码
 *
 * @author badman
 * @since 1.0.0
 */
@Slf4j
@Api("聊天会话关联接口")
@RestController
@RequestMapping("/chatSessionRel")
public class ChatSessionRelController {
	/**
	 * 聊天会话关联服务
	 */
	@Resource
	private ChatSessionRelService chatSessionRelService;

	/**
	 * 新增聊天会话关联
	 *
	 * @param request 聊天会话关联信息
	 * @return 操作结果
	 */
	@PostMapping
	@ApiOperation("新增聊天会话关联")
	public Result<String> save(@RequestBody ChatSessionRel request) {
		if (!chatSessionRelService.save(request)) {
			return Result.error("添加失败!");
		}
		return Result.success();
	}

	/**
	 * 删除聊天会话关联
	 *
	 * @param id 关联ID
	 * @return 操作结果
	 */
	@DeleteMapping("/{id}")
	@ApiOperation("删除聊天会话关联")
	public Result<String> removeById(@PathVariable String id) {
		if (!chatSessionRelService.removeById(id)) {
			return Result.error("删除失败!");
		}
		return Result.success();
	}

	/**
	 * 更新聊天会话关联
	 *
	 * @param request 聊天会话关联信息
	 * @return 操作结果
	 */
	@PutMapping
	@ApiOperation("更新聊天会话关联")
	public Result<String> updateById(@RequestBody ChatSessionRel request) {
		if (!chatSessionRelService.updateById(request)) {
			return Result.error("更新失败!");
		}
		return Result.success();
	}

	/**
	 * 查询聊天会话关联详情
	 *
	 * @param id 关联ID
	 * @return 关联详情
	 */
	@GetMapping("/{id}")
	@ApiOperation("查询聊天会话关联详情")
	public Result<ChatSessionRel> getById(@PathVariable String id) {
		return Result.success(chatSessionRelService.getById(id));
	}

	/**
	 * 查询聊天会话关联列表
	 *
	 * @param request 查询条件
	 * @return 关联列表
	 */
	@GetMapping("/list")
	@ApiOperation("查询聊天会话关联列表")
	public Result<List<ChatSessionRel>> list(ChatSessionRel request) {
		LambdaQueryWrapper<ChatSessionRel> wrapper = new LambdaQueryWrapper<>(request);
		return Result.success(chatSessionRelService.list(wrapper));
	}

	/**
	 * 分页查询聊天会话关联
	 * 按ID倒序排列
	 *
	 * @param request 分页查询条件
	 * @return 分页关联列表
	 */
	@PostMapping("/page")
	@ApiOperation("分页查询聊天会话关联")
	public Result<Page<ChatSessionRel>> page(@RequestBody PageQuery<ChatSessionRel> request) {
		LambdaQueryWrapper<ChatSessionRel> wrapper = new LambdaQueryWrapper<>(request.getParam());
		wrapper.orderByDesc(ChatSessionRel::getId);
		Page<ChatSessionRel> pageResult = chatSessionRelService.page(request.toPage(), wrapper);
		return Result.success(pageResult);
	}
}